home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / smaltalk / manchest.lha / MANCHESTER / manchester / 4.1 / AnimatedCursors.st next >
Text File  |  1993-07-24  |  3KB  |  112 lines

  1. "    NAME        AnimatedCursors
  2.     AUTHOR        Bernard Horan <bernard@is.morgan.com>
  3.     CONTRIBUTOR    Bernard Horan <bernard@is.morgan.com>
  4.     FUNCTION      Animated cursors
  5.     ST-VERSIONS    4.1
  6.     PREREQUISITES     Cursor-fromString
  7.     CONFLICTS     
  8.     DISTRIBUTION    global
  9.     VERSION        2.0
  10.     DATE        September 1992
  11.     SUMMARY        As its name suggests this class provides 'animated' cursors -- i.e. a sequence of cursors which are displayed whilst a block is being executed.
  12. Look on the class side in  protocol examples.
  13.  
  14. Bernard Horan, 25 September 1992"!
  15. Object subclass: #AnimatedCursor
  16.     instanceVariableNames: 'cursors index '
  17.     classVariableNames: 'TimeDelay '
  18.     poolDictionaries: ''
  19.     category: 'Animated Cursors'!
  20. AnimatedCursor comment:
  21. 'As it''s name suggests this class provides ''animated'' cursors -- i.e. a sequence of cursors which are displayed whilst a block is being
  22. executed.
  23.  
  24. Look on the class side in  protocol examples.
  25.  
  26. Bernard Horan, 25 September 1992'!
  27.  
  28.  
  29. !AnimatedCursor methodsFor: 'initialize'!
  30.  
  31. setCursors: anArrayOfCursors
  32.     cursors := anArrayOfCursors.
  33.     index := -1.! !
  34.  
  35. !AnimatedCursor methodsFor: 'displaying'!
  36.  
  37. show
  38.     self nextCursor showWhile:[TimeDelay copy wait]!
  39.  
  40. showWhile: aBlock 
  41.     "While evaluating the argument, aBlock, make the receiver be the 
  42.     cursor shape. The exBlock _must_ contain a 'Processor yield' 
  43.     expression, otherwise you don't get to see the cursors. 
  44.     There is a way round this exception, and that's to use the timeslice' 
  45.     fileIn that's in the Usenet goodies archive at Manchester (and 
  46.     elsewhere). 
  47.     Bernard Horan, 8 April 1992"
  48.  
  49.     | oldcursor value process |
  50.     oldcursor := Cursor currentCursor.
  51.     Cursor blank show.
  52.     process := [[true]
  53.                 whileTrue: 
  54.                     [self show.
  55.                     Processor yield]] newProcess.
  56.     process resume.
  57.     [value := aBlock value]
  58.         valueNowOrOnUnwindDo: 
  59.             [process terminate; release.
  60.             oldcursor beCursor].
  61.     ^value! !
  62.  
  63. !AnimatedCursor methodsFor: 'private'!
  64.  
  65. index
  66.     index := index + 1 \\ cursors size.
  67.     ^index +1!
  68.  
  69. nextCursor
  70.     ^cursors at: self index! !
  71. "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!
  72.  
  73. AnimatedCursor class
  74.     instanceVariableNames: ''!
  75.  
  76.  
  77. !AnimatedCursor class methodsFor: 'instance creation'!
  78.  
  79. fromCursors: anArrayOfCursors
  80.     ^self new setCursors: anArrayOfCursors! !
  81.  
  82. !AnimatedCursor class methodsFor: 'class initialization'!
  83.  
  84. initialize
  85.     "AnimatedCursor initialize"
  86.     TimeDelay := Delay forMilliseconds:500! !
  87.  
  88. !AnimatedCursor class methodsFor: 'examples'!
  89.  
  90. example
  91.     "AnimatedCursor example"
  92.  
  93.     | coll acurs exBlock |
  94.     coll := OrderedCollection new.
  95.     9
  96.         to: 0
  97.         by: -1
  98.         do: 
  99.             [:aNumber | 
  100.             | curs |
  101.             curs := Cursor fromString: aNumber printString emphasis: #bold.
  102.             coll add: curs].
  103.     acurs := self fromCursors: coll.
  104.     exBlock := [1 to: 100 do: 
  105.                 [:i | 
  106.                 Transcript show: i printString; cr.
  107.                 Processor yield]].
  108.     acurs showWhile: exBlock! !
  109. AnimatedCursor initialize!
  110.  
  111.  
  112.